LN technical details
from Lightning Network
Details of how LN chennel is implemented.
Such as architecture of commitment transaction.
lnbook/lnbook: Mastering the Lightning Network (LN)
Elle Mouton
t-bast/lightning-docs: Some in-depth articles about the Lightning Network
Lightning Networks Part I: Revocable Transactions
Lightning Networkの基本 (1). 仕様ドキュメントと Lightning Network での転送の概要 | by nayuta-uenohiro | Nayuta_ja | Medium
Understanding the Lightning Network, Part 3: Completing the Puzzle and Closing the Channelこっちのほうがわかりやすい
双方向Payment ChannelでのHTLCsの利用 上の日本語解説
第二弾: HTLCsを利用した中間者を経由するBitcoinの支払い - Develop with pleasure!
第三弾: 双方向Payment ChannelでのHTLCsの利用 - Develop with pleasure!
The Lightning Network
Lightning Networkの送金処理で使用されている技術【後編】 | Think IT(シンクイット) by Nayuta ueno-san
Timelocks - Builder's Guide
BOLT 読むといい
bolts/01-messaging.md at master · lightning/bolts · GitHub
LN のメッセージの形式
type は奇数
bolts/02-peer-protocol.md at master · lightning/bolts
bolts/03-transactions.md at master · lightning/bolts
あとはこれ: lnbook/07_payment_channels.asciidoc at develop · lnbook/lnbook
取引の流れ
Lightning Networkの送金処理で使用されている技術【後編】 | Think IT(シンクイット)
チャネルをつくって state を update する。これはかんたん
どうやって前の state を無効にするか
すべての to_self output はタイムロック OR remote が revocation key ですぐに unlock できる。
relay するにはどうするか
HTLC を連鎖させる
HTLC なしで commitment tx の更新を考える
lnbook/07_payment_channels.asciidoc at 54453c7b1cf82186614ab929b80876ba18bdc65d · lnbook/lnbook
commitment tx は 2of2 multisig の funding tx を unlock するため双方の署名が必要
相手側の commitment tx をつくって署名して、署名だけわたすのかな?
commitment tx は非対称なのことに注意
署名を渡すコマンドが commitment_signed
bolts/02-peer-protocol.md at master · lightning/bolts
前の commitment tx の再利用を防ぐために、revocation key を生成できるシークレットを渡す
これが revoke_and_ack
bolts/02-peer-protocol.md at master · lightning/bolts
送金
lnbook/09_channel_operation.asciidoc at 54453c7b1cf82186614ab929b80876ba18bdc65d · lnbook/lnbook
bolts/02-peer-protocol.md at master · lightning/bolts
Alice --> Bob --> Carol と送金する
Channel の状態を変化させるためには update_add_htlc がまず用いられる
update_add_htlc は、相手の commitment tx に HTLC の追加を依頼するコマンドと言える
commitment tx の詳細: bolts/03-transactions.md at master · lightning/bolts
Alice が Bob に投げる
update_add_htlc により新しい commitment tx が定義されるが、まだ署名は渡っていない。署名は 前述の commitment_signedで渡される
つまり、update_add_htlc と commitment_signed はセット。update_add_htlc は複数でも良いが、対応する 署名が必要。
Alice が Bob になげる
Bob は Carol に update_add_htlc を投げる前に、alice の前の commitment tx を revoke しないといけない
Alice はすでに新しい commitment tx は知っているので、Bob から Alice に commitment_signed で署名を渡す
Alice から Bob に revoc_and_akc
ここまでいけば、Bob は Carol に対して同じことをする
payment stack は、最長どれくらいスタックしてしまう?
Commitment transaction
送金はどのように行われるか
bolts/02-peer-protocol.md at master · lightning/bolts · GitHub
HTLC を追加
bolts/03-transactions.md at master · lightning/bolts · GitHub
update_add_htlc は複数可能
bolts/02-peer-protocol.md at master · lightning/bolts · GitHub
流れ
update_add_htlc で送金リクエスト。
update_add_htlc の受けては、ローカルの commitment tx をその内容に従って作成し、署名する。commitment_signed で署名を送る?
update_add_htlc の送り手は、commitment_signed が正しければ、ローカルの commitment tx を更新する?そして revoke_and_ack を返す?
HTLC はなんのためにあるか
リレーを atomic に行うため
A - B - C と送金する場合(A が B を経由して C に送金したい)
B は C に渡したけど、A から受け取れない可能性がある
A は B に渡したけど、B が C に渡さない可能性がある
A は C しか知らない値(preimage)で、 B への送金をロックする(hash(preimage)が unlock には必要) + 取り戻す用の timelock
これが HTLC
B は自分は送ったのに、先に A に取り戻されると困る
そのため、B-C の HTLC の timelock は A-C の HTLC の timelock よりも短くないといけない
A-B timelock < B-C timelock だと、C が preimage を明かしたタイミング(つまり B-C の timelock よりも前)で、すでに A が取り戻せる可能性がある(こちらの方が timelock が開けるのが早いので)
C が preimage を明かしたあとに、B がそれを使って A-B の HTLC から資金を受け取れるのに十分な時間差が必要
まて
The reason for the separate transaction stage for HTLC outputs is so that HTLCs can timeout or be fulfilled even though they are within the to_self_delay delay. Otherwise, the required minimum timeout on HTLCs is lengthened by this delay, causing longer timeouts for HTLCs traversing the network.
Channel close
lnbook/07_payment_channels.asciidoc at develop · lnbook/lnbook